package com.yunxi.module.system.service.permission;

import com.yunxi.module.system.model.permission.MenuDO;
import com.yunxi.module.system.vo.admin.permission.menu.MenuListReqVO;
import com.yunxi.module.system.vo.admin.permission.menu.MenuSaveReqVO;

import java.util.Collection;
import java.util.List;

/**
 * <p>
 * 菜单 Service 接口
 * </p>
 *
 * @author lidy
 * @since 2024-05-07
 */
public interface MenuService {

    /**
     * 获得权限对应的菜单编号数组
     *
     * @param permission 权限标识
     * @return 数组
     */
    List<Long> getMenuIdListByPermissionFromCache(String permission);

    /**
     * 获得全部菜单列表
     *
     * @return 全部菜单列表
     */
    List<MenuDO> getMenuList();

    /**
     * 获得全部菜单列表
     *
     * @param menuIds 菜单编号集合
     * @return 全部菜单列表
     */
    List<MenuDO> getMenuList(Collection<Long> menuIds);

    /**
     * 获得菜单列表
     *
     * @param reqVO 查询条件
     * @return 菜单列表
     */
    List<MenuDO> getMenuList(MenuListReqVO reqVO);

    /**
     * 获得菜单信息
     *
     * @param menuId 菜单编号
     * @return 菜单信息
     */
    MenuDO getMenu(Long menuId);

    /**
     * 基于租户，筛选菜单列表
     * 注意：如果是系统租户，返回的也是全菜单
     *
     * @param reqVO 筛选条件
     * @return 菜单列表
     */
    List<MenuDO> getMenuListByTenant(MenuListReqVO reqVO);

    /**
     * 创建菜单
     *
     * @param saveReqVO 菜单信息
     * @return 菜单编号
     */
    Long createMenu(MenuSaveReqVO saveReqVO);

    /**
     * 更新菜单信息
     *
     * @param updateReqVO 菜单信息
     */
    void updateMenu(MenuSaveReqVO updateReqVO);

    /**
     * 删除菜单
     *
     * @param menuId 菜单编号
     */
    void deleteMenu(Long menuId);
}
